package cn.le.agent;

/**
 * Created by admin on 2017/6/8.
 *
 * 显示工厂,限制泛型类型,在编译是检测类型
 *
 */
public interface FactoryI<T> {

    T create();
}

class Foo2<T>{

    private T x;
    public <F extends FactoryI<T>> Foo2(F factory)
    {
        x = factory.create();
    }
}

class IntegerFactory implements FactoryI<Integer>{

    public Integer create()
    {
        return new Integer(0);
    }
}

class Widget{

    public static class Factory implements FactoryI<Widget>
    {
        public Widget create()
        {
            System.out.println("Widget create");
            return new Widget();
        }
    }
}

class FactoryConstraint{

    public static void main(String[] args) {
        new Foo2<Integer>(new IntegerFactory());
        new Foo2<Widget>(new Widget.Factory());
    }
}



